package com.shengsiyuan.nio;

import java.nio.ByteBuffer;

// slice buffer 与原有的 buffer 共享相同的底层数组

public class NioTest06 {

    public static void main(String[] arg) {
        ByteBuffer buffer = ByteBuffer.allocate(10);

        for (int i = 0; i < buffer.capacity(); i++) {
            buffer.put((byte) i);
        }

        // slice 时的起止位置
        buffer.position(3);
        buffer.limit(8);

        /*
         * 创建一个和当前buffer共享内容块的buffer
         */
        ByteBuffer sliceBu = buffer.slice(); // 返回快照（返回部分数据的引用），底层还是同一份数据
        for (int i = 0; i < sliceBu.capacity(); i++) {
            byte b = sliceBu.get(i);
            b *= 2;
            sliceBu.put(i, b);
        }
//        ByteBuffer readonly = buffer.asReadOnlyBuffer(); // 只读 buffer，只能读不能写
        buffer.position(0);
        buffer.limit(buffer.capacity());
        while (buffer.hasRemaining()) {
            System.out.println(buffer.get());
        }

    }
}
